package co.saen.nextincloud.dao;

import co.saen.nextincloud.hibernate.HibernateUtil;
import co.saen.nextincloud.model.Profiles;
import java.util.List;
import org.hibernate.Session;

/**
 * Todos los métodos y operaciones sobre la tabla de Perfiles
 *
 * @author Felipe Rolvar
 */
public class ProfilesDAO {

    public ProfilesDAO() {
    }

     /*
     * Función para Insertar un Nuevo Perfil
     */
    public String createProfile(Profiles profile) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String msg;
        try {
            session.beginTransaction();
            session.save(profile);
            session.beginTransaction().commit();
            msg = "ok";
        } catch (Exception e) {
            msg = "Error al Insertar Nuevo Perfil: " + e.getMessage();
            session.beginTransaction().rollback();
        } finally{
            session.getSessionFactory().close();
        }
        return msg;
    }

    /*
     * Función que permite actualizar un perfil 
     */
    public String updateProfile(Profiles profile) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String msg;
        try {
            session.beginTransaction();
            session.merge(profile);
            session.beginTransaction().commit();
            msg = "ok";
        } catch (Exception e) {
            msg = "Error en actualizar Perfil: " + e.getMessage();
            session.beginTransaction().rollback();
        } finally{
           session.getSessionFactory().close();
        }
        return msg;
    }

    /*
     * Función para eliminar un Perfil
     */
    public String deleteProfile(Profiles profile) {
        String msg;
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.delete(profile);
            session.beginTransaction().commit();
            msg = "ok";
        } catch (Exception e) {
            msg = "Error al eliminar Perfil: " + e.getMessage();
            session.beginTransaction().rollback();
        } finally{
            session.getSessionFactory().close();
        }
        return msg;
    }

    /*
     * Método que me devuelve un objeto tipo Perfil con un parámetro de búsqueda
     * el Id.
     */
    public Profiles searchProfileById(String prfCode) {
        Profiles profile;
        Session session = HibernateUtil.getSessionFactory().openSession();
        profile = (Profiles) session.load(Profiles.class, prfCode);
        session.getSessionFactory().close();
        return profile;
    }

    /*
     * Función que devuelve una lista de los perfiles disponibles
     */
    public List<Profiles> listOfProfiles() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return session.createQuery("from Profiles").list();
    }
}
